package br.com.agileplus.linkedcompany.web.arealogada;

import java.io.IOException;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.agileplus.linkedcompany.commons.criptografia.Criptografia;
import br.com.agileplus.linkedcompany.web.api.client.impl.UsuarioWebApiClientImpl;
import br.com.agileplus.linkedcompany.web.api.dto.in.UsuarioDTO;

@Component
@ManagedBean(name = "autenticacaoBean")
@SessionScoped
public class AutenticacaoBean {

	@Autowired
	private UsuarioWebApiClientImpl usuarioWebApiClientImpl;
	
	private String loginUsuario;
	private String passwordUsuario;
	private Boolean autenticado = true;
	private String mensagemRetorno;
	private UsuarioDTO usuarioDto;
	
	public void autenticarUsuario() throws IOException {
		
		FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
		
		this.autenticado = true;
		
		UsuarioDTO usuarioDto = this.usuarioWebApiClientImpl.autenticarUsuario(this.loginUsuario, Criptografia.criptografar(this.passwordUsuario));
		this.autenticado = usuarioDto.getAutenticado();
		
		if(!usuarioDto.getAutenticado()) {
			this.mensagemRetorno = getMensagensErro(usuarioDto.getErros());
			context.getExternalContext().redirect(request.getContextPath() + "/index.xhtml");
		} else {
			this.usuarioDto = usuarioDto;
		}
		
		context.getApplication().getNavigationHandler().handleNavigation(context, null, "/views/area_usuario.xhtml");
		//context.getExternalContext().redirect(request.getContextPath() + "/views/area_usuario.xhtml");
		
	}
	
	private String getMensagensErro(List<String> list) {
		StringBuilder mensagemErro = new StringBuilder();
		
		for(String erro : list) {
			mensagemErro.append(erro);
		}
		
		return mensagemErro.toString();
	}
	
	public String getLoginUsuario() {
		return loginUsuario;
	}

	public void setLoginUsuario(String loginUsuario) {
		this.loginUsuario = loginUsuario;
	}

	public String getPasswordUsuario() {
		return passwordUsuario;
	}

	public void setPasswordUsuario(String passwordUsuario) {
		this.passwordUsuario = passwordUsuario;
	}

	public void setUsuarioWebApiClientImpl(
			UsuarioWebApiClientImpl usuarioWebApiClientImpl) {
		this.usuarioWebApiClientImpl = usuarioWebApiClientImpl;
	}

	public Boolean getAutenticado() {
		return autenticado;
	}

	public void setAutenticado(Boolean autenticado) {
		this.autenticado = autenticado;
	}

	public String getMensagemRetorno() {
		return mensagemRetorno;
	}

	public void setMensagemRetorno(String mensagemRetorno) {
		this.mensagemRetorno = mensagemRetorno;
	}

	public UsuarioDTO getUsuarioDto() {
		return usuarioDto;
	}

	public void setUsuarioDto(UsuarioDTO usuarioDto) {
		this.usuarioDto = usuarioDto;
	}
	
}